package br.com.mftc.efitness.beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.mftc.efitness.basicas.PerfilDeUsuario;
import br.com.mftc.efitness.basicas.Permissao;
import br.com.mftc.efitness.excecoes.ExcecaoCamposObrigatoriosNaoPreenchidos;
import br.com.mftc.efitness.excecoes.ExcecaoCaracteresEspeciaisNaoSaoPermitidos;
import br.com.mftc.efitness.excecoes.ExcecaoGeral;
import br.com.mftc.efitness.excecoes.ExcecaoNegocio;
import br.com.mftc.efitness.util.Variaveis;

@ManagedBean(name = "novoPerfilDeUsuario")
@ViewScoped
public class NovoPerfilDeUsuarioBean {

	@ManagedProperty("#{mensagens}")
	private MensagensBean mensagens;
	
	@ManagedProperty("#{fachada}")
	private FachadaBean fachada;
	
	private PerfilDeUsuario perfilDeUsuario;
	private List<Permissao> permissoes;
	
	@PostConstruct
	public void inicializar() {
		perfilDeUsuario = new PerfilDeUsuario();
	}
	
	public void inserirPerfilDeUsuario() {
		try {
			fachada.inserirPerfisDeUsuario(perfilDeUsuario);
			
			perfilDeUsuario = new PerfilDeUsuario();
			
			mensagens.addMensagem(FacesMessage.SEVERITY_INFO, Variaveis.TITULO_SUCESSO, Variaveis.MODAL_NOVO_PERFIL_MENSAGEM_SUCESSO);
		} catch (ExcecaoCamposObrigatoriosNaoPreenchidos excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_WARN, excecao);
		} catch (ExcecaoNegocio | ExcecaoCaracteresEspeciaisNaoSaoPermitidos | ExcecaoGeral excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_FATAL, excecao);
		} 
	}

	public PerfilDeUsuario getPerfilDeUsuario() {
		return perfilDeUsuario;
	}

	public void setPerfilDeUsuario(PerfilDeUsuario perfilDeUsuario) {
		this.perfilDeUsuario = perfilDeUsuario;
	}

	public List<Permissao> getPermissoes() {
		if (permissoes == null) {
			try {
				setPermissoes(fachada.consultarPermissoes());
			} catch (ExcecaoNegocio excecao) {
				mensagens.addMensagem(FacesMessage.SEVERITY_FATAL, excecao);
			}
		}
		return permissoes;
	}

	public void setPermissoes(List<Permissao> permissoes) {
		this.permissoes = permissoes;
	}

	public MensagensBean getMensagens() {
		return mensagens;
	}

	public void setMensagens(MensagensBean mensagens) {
		this.mensagens = mensagens;
	}

	public FachadaBean getFachada() {
		return fachada;
	}

	public void setFachada(FachadaBean fachada) {
		this.fachada = fachada;
	}
}
